--- src/dos/djirqs.s    14 Feb 2001 23:55:12 -0000      1.2
+++ src/dos/djirqs.s    9 Feb 2003 18:16:12 -0000
@@ -32,6 +32,11 @@
    pushw %fs                                                               ; \
    pushw %gs                                                               ; \
    pushal                                                                  ; \
+   testl $CPU_FPU, GLOBL(cpu_capabilities)                                 ; \
+   jz no_save_fpu_state_##x                                                ; \
+   subl $108, %esp                                                         ; \
+   fsave %esp                                                              ; \
+ no_save_fpu_state_##x:                                                    ; \
                                                                           ; \
    .byte 0x2e                             /* cs: override */               ; \
    movw GLOBL(__djgpp_ds_alias), %ax                                       ; \
@@ -82,6 +87,12 @@
    orl %eax, %eax                         /* check return value */         ; \
    jz get_out_##x                                                          ; \
                                                                           ; \
+   testl $CPU_FPU, GLOBL(cpu_capabilities)                                 ; \
+   jz no_restore_fpu_state_##x                                             ; \
+   frstor %esp                                                             ; \
+   addl $108, %esp                                                         ; \
+ no_restore_fpu_state_##x:                                                 ; \
+
    popal                                  /* chain to old handler */       ; \
    popw %gs                                                                ; \
    popw %fs                                                                ; \
@@ -90,6 +101,11 @@
    ljmp *%cs:GLOBL(_irq_handler) + IRQ_OLDVEC + IRQ_SIZE*x                 ; \
                                                                           ; \
 get_out_##x:                                                               ; \
+   testl $CPU_FPU, GLOBL(cpu_capabilities)                                 ; \
+   jz no_restore_fpu_state2_##x                                            ; \
+   frstor %esp                                                             ; \
+   addl $108, %esp                                                         ; \
+ no_restore_fpu_state2_##x:                                                ; \
    popal                                  /* iret */                       ; \
    popw %gs                                                                ; \
    popw %fs                                                                ; \
